// 测试脚本：使用当前登录账号发布课程和评价
const axios = require('axios');
const fs = require('fs');
const path = require('path');

// API基础URL
const API_BASE_URL = 'http://localhost:3002/api/demo';

// 创建axios实例
const api = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 设置认证token
function setAuthToken(token) {
  if (token) {
    api.defaults.headers.common['Authorization'] = `Bearer ${token}`;
  } else {
    delete api.defaults.headers.common['Authorization'];
  }
}

// 从localStorage获取认证信息（模拟浏览器的localStorage）
function getAuthInfo() {
  try {
    const fs = require('fs');
    const path = require('path');
    const authFile = path.join(__dirname, '.auth.json');
    
    if (fs.existsSync(authFile)) {
      const data = fs.readFileSync(authFile, 'utf8');
      return JSON.parse(data);
    }
    return null;
  } catch (error) {
    console.error('读取认证信息失败:', error);
    return null;
  }
}

// 保存认证信息到本地文件（模拟浏览器的localStorage）
function saveAuthInfo(authInfo) {
  try {
    const fs = require('fs');
    const path = require('path');
    const authFile = path.join(__dirname, '.auth.json');
    
    fs.writeFileSync(authFile, JSON.stringify(authInfo, null, 2));
    console.log('认证信息已保存');
  } catch (error) {
    console.error('保存认证信息失败:', error);
  }
}

// 用户登录
async function login(username, password) {
  try {
    // 注意：后端API期望接收pwd字段而不是password字段
    const loginData = {
      username: username,
      pwd: password // 将前端的password字段转换为后端期望的pwd字段
    };
    
    console.log('正在登录，用户名:', username);
    const response = await instance.post('/login', loginData);
    
    if (response.data && response.data.success) {
      const authInfo = {
        token: response.data.token,
        user: {
          id: response.data.id,
          username: response.data.username,
          realName: response.data.realName
        }
      };
      
      // 设置认证token
      setAuthToken(authInfo.token);
      
      // 保存认证信息
      saveAuthInfo(authInfo);
      
      console.log('登录成功，用户信息:', authInfo.user);
      return authInfo;
    } else {
      throw new Error(response.data?.message || '登录失败，用户名或密码错误');
    }
  } catch (error) {
    console.error('登录失败:', error.response?.data || error.message);
    throw error;
  }
}

// 添加课程
async function addCourse(courseData) {
  try {
    const response = await api.post('/addcourse', courseData);
    
    if (response.data && response.data.success) {
      console.log('课程添加成功:', response.data.data);
      return response.data.data;
    } else {
      throw new Error(response.data?.message || '添加课程失败');
    }
  } catch (error) {
    console.error('添加课程错误:', error.message);
    throw error;
  }
}

// 添加课程评价
async function addCourseComment(commentData) {
  try {
    const response = await api.post('/additem', {
      typeIndex: 4, // COMMENTS表
      ...commentData
    });
    
    if (response.data && response.data.success) {
      console.log('评价添加成功:', response.data.data);
      return response.data.data;
    } else {
      throw new Error(response.data?.message || '添加评价失败');
    }
  } catch (error) {
    console.error('添加评价错误:', error.message);
    throw error;
  }
}

// 获取课程列表
async function getCourses() {
  try {
    const response = await api.get('/getallitems', {
      params: {
        typeIndex: 6 // COURSES表
      }
    });
    
    if (response.data && response.data.success) {
      return response.data.data;
    } else {
      return [];
    }
  } catch (error) {
    console.error('获取课程列表错误:', error.message);
    return [];
  }
}

// 主函数
async function main() {
  try {
    // 1. 获取已有认证信息
    let authInfo = getAuthInfo();
    
    // 2. 如果没有认证信息或认证失效，进行登录
    if (!authInfo) {
      console.log('请输入登录信息:');
      // 使用用户名23002944进行登录，密码假设为123456
      authInfo = await login('23002944', '123456');
    } else {
      setAuthToken(authInfo.token);
      console.log('使用已保存的登录信息:', authInfo.user);
    }
    
    // 3. 准备课程数据
    const courseData = {
      title: 'Vue.js从入门到精通_测试课程' + Date.now(),
      body: '这是一门测试课程，介绍Vue.js的基础知识和实战技巧。通过本课程的学习，你将能够掌握Vue.js的核心概念和开发方法，能够独立开发Vue.js应用。',
      teachername: '测试老师',
      startTime: new Date().toISOString(),
      endTime: new Date(Date.now() + 60 * 60 * 1000).toISOString(), // 默认1小时后结束
      categoryid: 349, // 根据update-userid.js文件中的信息，前端开发_测试类别的ID是349
      userid: authInfo.user.id,
      picPaths: null
    };
    
    console.log('准备添加的课程数据:', courseData);
    
    // 4. 添加课程
    const newCourse = await addCourse(courseData);
    
    // 5. 为课程添加评价
    const commentData = {
      body: '这门课程非常好，内容丰富，讲解清晰，很适合入门学习！',
      userid: authInfo.user.id,
      replyType: '课程',
      articleid: newCourse.id
    };
    
    console.log('准备添加的评价数据:', commentData);
    
    await addCourseComment(commentData);
    
    console.log('\n=== 发布课程和评价成功 ===');
    console.log('课程ID:', newCourse.id);
    console.log('课程名称:', newCourse.title);
    console.log('发布者:', authInfo.user.realName || authInfo.user.username);
    
    // 6. 查看所有课程
    const courses = await getCourses();
    console.log('\n当前系统中的课程数量:', courses.length);
    
  } catch (error) {
    console.error('执行过程中出错:', error);
    process.exit(1);
  }
}

// 执行主函数
main().then(() => {
  console.log('测试脚本执行完毕');
  process.exit(0);
});